#include <commonheader.h>
#include "modulemgr.h"
#include <string>

IMPLEMENT_SINGLETON(CModuleMgr)

CModuleMgr::CModuleMgr()
{
	 m_poNetModule = NULL;
	 m_poTimerModule = NULL;
	 m_poPipeModule = NULL;
	 m_poDBModule = NULL;
}

CModuleMgr::~CModuleMgr()
{
}

bool CModuleMgr::Init()
{
	if (!_LoadCoreModule()) return false;

	return true;
}

void CModuleMgr::UnInit()
{
    _UnLoadCoreModule();
}

bool CModuleMgr::_LoadCoreModule()
{
	return (_LoadNetModule() &&
		_LoadTimerModule() &&
		_LoadPipeModule() &&
        _LoadDBModule());
}

void CModuleMgr::_UnLoadCoreModule()
{
	_UnLoadNetModule();
	_UnLoadTimerModule();
	_UnLoadPipeModule();
    _UnLoadDBModule();
}

bool CModuleMgr::_LoadNetModule()
{
	m_poNetModule = SGDP::SDNetGetModule(&SGDP::SDNET_VERSION);
	if(m_poNetModule == NULL)
	{
		SYS_CRITICAL("SDNetGetModule failed!");
		return false;
	}
    SGDP::SDNetSetLogger(new CNetLog,LOGLV_INFO|LOGLV_WARN|LOGLV_CRITICAL);

	return true;
}

void CModuleMgr::_UnLoadNetModule()
{
    if (NULL != m_poNetModule)
    {
        m_poNetModule->Release();
        m_poNetModule = NULL;
    }
}

bool CModuleMgr::_LoadTimerModule()
{
	m_poTimerModule = SGDP::SDTimerCreateModule(&SGDP::SDTIMER_VERSION);
	if(m_poNetModule == NULL)
	{
		SYS_CRITICAL("SDTimerCreateModule failed!");
		return false;
	}

	return true;
}

void CModuleMgr::_UnLoadTimerModule()
{
	if (NULL != m_poTimerModule)
	{
		m_poTimerModule->Release();
		m_poTimerModule = NULL;
	}
}

bool CModuleMgr::_LoadPipeModule()
{
	m_poPipeModule = SGDP::SDPipeGetModule(&SGDP::SDPIPE_VERSION);
	if(m_poPipeModule == NULL)
	{
		SYS_CRITICAL("SDPipeGetModule failed!");
		return false;
	}

    SGDP::SDPipeSetLogger(new CLog,LOGLV_INFO|LOGLV_WARN|LOGLV_CRITICAL);

	return true;
}

void CModuleMgr::_UnLoadPipeModule()
{
	if (NULL != m_poPipeModule)
	{
		m_poPipeModule->Release();
		m_poPipeModule = NULL;
	}
}

bool CModuleMgr::_LoadDBModule()
{
    m_poDBModule = SGDP::SDDBGetModule(&SGDP::SDDB_VERSION);
	if(NULL == m_poDBModule)
	{
		SYS_CRITICAL("SDCreateDB failed!");
		return false;
	}

    return true;
}

void CModuleMgr::_UnLoadDBModule()
{
	if (NULL != m_poDBModule)
	{
		m_poDBModule->Release();
		m_poDBModule = NULL;
	}
}
